cmake_minimum_required(VERSION 3.5.0)
project(etl_17_syntax_check)

add_definitions(-DETL_DEBUG)

option(NO_STL "No STL" OFF)

message(STATUS "Compiling for C++17")

if (NO_STL)
	message(STATUS "Compiling for No STL")
	add_definitions(-DETL_NO_STL)
else()
	message(STATUS "Compiling for STL")
endif()

if (ETL_USE_TYPE_TRAITS_BUILTINS)
	message(STATUS "Compiling for built-in type traits")
	add_definitions(-DETL_USE_TYPE_TRAITS_BUILTINS)
endif()

if (ETL_USER_DEFINED_TYPE_TRAITS)
	message(STATUS "Compiling for user defined type traits")
	add_definitions(-DETL_USER_DEFINED_TYPE_TRAITS)
endif()

if (ETL_FORCE_TEST_CPP03_IMPLEMENTATION)
	message(STATUS "Force C++03 implementations")
	add_definitions(-DETL_FORCE_TEST_CPP03_IMPLEMENTATION)
endif()

add_library(t17 OBJECT)
target_compile_definitions(t17 PRIVATE __STDC_LIMIT_MACROS __STDC_CONSTANT_MACROS __STDC_FORMAT_MACROS)
target_include_directories(t17 PRIVATE "")
target_include_directories(t17 SYSTEM PRIVATE ../../../include)
set_target_properties(t17 PROPERTIES
        CXX_STANDARD 17
        CXX_STANDARD_REQUIRED ON
        CXX_EXTENSIONS ON
        )
target_sources(t17 PRIVATE etl_profile.h
        ../absolute.h.t.cpp
        ../algorithm.h.t.cpp
        ../alignment.h.t.cpp
        ../array.h.t.cpp
        ../array_view.h.t.cpp
        ../array_wrapper.h.t.cpp
        ../atomic.h.t.cpp
        ../base64.h.t.cpp
        ../basic_format_spec.h.t.cpp
        ../basic_string.h.t.cpp
        ../basic_string_stream.h.t.cpp
        ../binary.h.t.cpp
        ../bip_buffer_spsc_atomic.h.t.cpp
        ../bit.h.t.cpp
        ../bitset_legacy.h.t.cpp
        ../bitset_new.h.t.cpp
        ../bit_stream.h.t.cpp
        ../byte.h.t.cpp
        ../byte_stream.h.t.cpp
        ../bloom_filter.h.t.cpp
        ../bresenham_line.h.t.cpp
        ../buffer_descriptors.h.t.cpp
        ../callback.h.t.cpp
        ../callback_service.h.t.cpp
        ../callback_timer.h.t.cpp
        ../callback_timer_atomic.h.t.cpp
        ../callback_timer_interrupt.h.t.cpp
        ../callback_timer_locked.h.t.cpp
        ../char_traits.h.t.cpp
        ../checksum.h.t.cpp
        ../circular_buffer.h.t.cpp
        ../circular_iterator.h.t.cpp
        ../combinations.h.t.cpp
        ../compare.h.t.cpp
        ../constant.h.t.cpp
        ../container.h.t.cpp
        ../correlation.h.t.cpp
        ../covariance.h.t.cpp
        ../crc16.h.t.cpp
        ../crc16_a.h.t.cpp
        ../crc16_arc.h.t.cpp
        ../crc16_aug_ccitt.h.t.cpp
        ../crc16_buypass.h.t.cpp
        ../crc16_ccitt.h.t.cpp
        ../crc16_cdma2000.h.t.cpp
        ../crc16_dds110.h.t.cpp
        ../crc16_dectr.h.t.cpp
        ../crc16_dectx.h.t.cpp
        ../crc16_dnp.h.t.cpp
        ../crc16_en13757.h.t.cpp
        ../crc16_genibus.h.t.cpp
        ../crc16_kermit.h.t.cpp
        ../crc16_m17.h.t.cpp
        ../crc16_maxim.h.t.cpp
        ../crc16_mcrf4xx.h.t.cpp
        ../crc16_modbus.h.t.cpp
        ../crc16_profibus.h.t.cpp
        ../crc16_riello.h.t.cpp
        ../crc16_t10dif.h.t.cpp
        ../crc16_teledisk.h.t.cpp
        ../crc16_tms37157.h.t.cpp
        ../crc16_usb.h.t.cpp
        ../crc16_x25.h.t.cpp
        ../crc16_xmodem.h.t.cpp
        ../crc32.h.t.cpp
        ../crc32_bzip2.h.t.cpp
        ../crc32_c.h.t.cpp
        ../crc32_d.h.t.cpp
        ../crc32_jamcrc.h.t.cpp
        ../crc32_mpeg2.h.t.cpp
        ../crc32_posix.h.t.cpp
        ../crc32_q.h.t.cpp
        ../crc32_xfer.h.t.cpp
        ../crc64_ecma.h.t.cpp
        ../crc8_ccitt.h.t.cpp
        ../crc8_cdma2000.h.t.cpp
        ../crc8_darc.h.t.cpp
        ../crc8_dvbs2.h.t.cpp
        ../crc8_ebu.h.t.cpp
        ../crc8_icode.h.t.cpp
        ../crc8_itu.h.t.cpp
        ../crc8_maxim.h.t.cpp
        ../crc8_rohc.h.t.cpp
        ../crc8_wcdma.h.t.cpp
        ../cyclic_value.h.t.cpp
        ../debounce.h.t.cpp
        ../debug_count.h.t.cpp
        ../delegate.h.t.cpp
        ../delegate_service.h.t.cpp
        ../deque.h.t.cpp
        ../endianness.h.t.cpp
        ../enum_type.h.t.cpp
        ../error_handler.h.t.cpp
        ../exception.h.t.cpp
        ../expected.h.t.cpp
        ../factorial.h.t.cpp
        ../fibonacci.h.t.cpp
        ../file_error_numbers.h.t.cpp
        ../fixed_iterator.h.t.cpp
        ../fixed_sized_memory_block_allocator.h.t.cpp
        ../flags.h.t.cpp
        ../flat_map.h.t.cpp
        ../flat_multimap.h.t.cpp
        ../flat_multiset.h.t.cpp
        ../flat_set.h.t.cpp
        ../fnv_1.h.t.cpp
        ../format_spec.h.t.cpp
        ../forward_list.h.t.cpp
        ../frame_check_sequence.h.t.cpp
        ../fsm.h.t.cpp
        ../function.h.t.cpp
        ../functional.h.t.cpp
        ../gamma.h.t.cpp
        ../generic_pool.h.t.cpp
        ../hash.h.t.cpp
        ../ihash.h.t.cpp
        ../histogram.h.t.cpp
        ../imemory_block_allocator.h.t.cpp
        ../indirect_vector.h.t.cpp
        ../initializer_list.h.t.cpp
        ../instance_count.h.t.cpp
        ../integral_limits.h.t.cpp
        ../intrusive_forward_list.h.t.cpp
        ../intrusive_links.h.t.cpp
        ../intrusive_list.h.t.cpp
        ../intrusive_queue.h.t.cpp
        ../intrusive_stack.h.t.cpp
        ../io_port.h.t.cpp
        ../ipool.h.t.cpp
        ../ireference_counted_message_pool.h.t.cpp
        ../iterator.h.t.cpp
        ../jenkins.h.t.cpp
        ../largest.h.t.cpp
        ../limiter.h.t.cpp
        ../limits.h.t.cpp
        ../list.h.t.cpp
        ../log.h.t.cpp
        ../macros.h.t.cpp
        ../map.h.t.cpp
        ../math.h.t.cpp
        ../math_constants.h.t.cpp
        ../mean.h.t.cpp
        ../mem_cast.h.t.cpp
        ../memory.h.t.cpp
        ../memory_model.h.t.cpp
        ../message.h.t.cpp
        ../message_broker.h.t.cpp
        ../message_bus.h.t.cpp
        ../message_packet.h.t.cpp
        ../message_router.h.t.cpp
        ../message_router_registry.h.t.cpp
        ../message_timer.h.t.cpp
        ../message_timer_atomic.h.t.cpp
        ../message_timer_interrupt.h.t.cpp
        ../message_timer_locked.h.t.cpp
        ../message_types.h.t.cpp
        ../multimap.h.t.cpp
        ../multiset.h.t.cpp
        ../multi_array.h.t.cpp
        ../multi_range.h.t.cpp
        ../multi_span.h.t.cpp
        ../multi_vector.h.t.cpp
        ../murmur3.h.t.cpp
        ../mutex.h.t.cpp
        ../negative.h.t.cpp
        ../nth_type.h.t.cpp
        ../nullptr.h.t.cpp
        ../null_type.h.t.cpp
        ../numeric.h.t.cpp
        ../observer.h.t.cpp
        ../optional.h.t.cpp
        ../overload.h.t.cpp
        ../packet.h.t.cpp
        ../parameter_pack.h.t.cpp
        ../parameter_type.h.t.cpp
        ../pearson.h.t.cpp
        ../permutations.h.t.cpp
        ../placement_new.h.t.cpp
        ../poly_span.h.t.cpp
        ../platform.h.t.cpp
        ../pool.h.t.cpp
        ../power.h.t.cpp
        ../priority_queue.h.t.cpp
        ../pseudo_moving_average.h.t.cpp
        ../quantize.h.t.cpp
        ../queue.h.t.cpp
        ../queue_lockable.h.t.cpp
        ../queue_mpmc_mutex.h.t.cpp
        ../queue_spsc_atomic.h.t.cpp
        ../queue_spsc_isr.h.t.cpp
        ../queue_spsc_locked.h.t.cpp
        ../radix.h.t.cpp
        ../random.h.t.cpp
        ../ratio.h.t.cpp
        ../reference_counted_message.h.t.cpp
        ../reference_counted_message_pool.h.t.cpp
        ../reference_counted_object.h.t.cpp
        ../reference_flat_map.h.t.cpp
        ../reference_flat_multimap.h.t.cpp
        ../reference_flat_multiset.h.t.cpp
        ../reference_flat_set.h.t.cpp
        ../rescale.h.t.cpp
        ../rms.h.t.cpp
        ../scaled_rounding.h.t.cpp
        ../scheduler.h.t.cpp
        ../set.h.t.cpp
        ../shared_message.h.t.cpp
        ../singleton.h.t.cpp
        ../smallest.h.t.cpp
        ../span.h.t.cpp
        ../sqrt.h.t.cpp
        ../stack.h.t.cpp
        ../standard_deviation.h.t.cpp
        ../state_chart.h.t.cpp
        ../static_assert.h.t.cpp
        ../string.h.t.cpp
        ../string_stream.h.t.cpp
        ../string_utilities.h.t.cpp
        ../string_view.h.t.cpp
        ../successor.h.t.cpp
        ../task.h.t.cpp
        ../threshold.h.t.cpp
        ../timer.h.t.cpp
        ../to_arithmetic.h.t.cpp
        ../to_string.h.t.cpp
        ../to_u8string.h.t.cpp
        ../to_u16string.h.t.cpp
        ../to_u32string.h.t.cpp
        ../to_wstring.h.t.cpp
        ../type_def.h.t.cpp
        ../type_lookup.h.t.cpp
        ../type_select.h.t.cpp
        ../type_traits.h.t.cpp
        ../u8format_spec.h.t.cpp
        ../u8string.h.t.cpp
        ../u8string_stream.h.t.cpp
        ../u16format_spec.h.t.cpp
        ../u16string.h.t.cpp
        ../u16string_stream.h.t.cpp
        ../u32format_spec.h.t.cpp
        ../u32string.h.t.cpp
        ../u32string_stream.h.t.cpp
        ../unaligned_type.h.t.cpp
        ../unordered_map.h.t.cpp
        ../unordered_multimap.h.t.cpp
        ../unordered_multiset.h.t.cpp
        ../unordered_set.h.t.cpp
        ../user_type.h.t.cpp
        ../utility.h.t.cpp
        ../variance.h.t.cpp
        ../variant_legacy.h.t.cpp
        ../variant_variadic.h.t.cpp
        ../variant_pool.h.t.cpp
        ../vector.h.t.cpp
        ../version.h.t.cpp
        ../visitor.h.t.cpp
        ../wformat_spec.h.t.cpp
        ../wstring.h.t.cpp
        ../wstring_stream.h.t.cpp
        )
